<?php

class MovimientosController extends AppController {

    var $name = 'Movimientos';
    var $uses = array('TiendaLocal', 'Movimiento', 'Configuracion', 'Banco', 'TipoMovimiento', 'MovimientoDetalle', 'Material', 'Clasificacion');
    var $components = array('Interfaz', 'Vista', 'Maestro', 'Email', 'Util');
    var $helpers = array('Html', 'Ajax', 'Javascript', 'Vista', 'Interfaz', 'Json');
    var $layout = "ajax";

    function beforeFilter() {
        $this->validar();
    }

    public function index($busq = null) {
        //$this->permisos_menu_individual('Movimientos de Materiales'); ///BUSCA LOS PERMISOS QUE SE UTILIZARAN EN LA VISTA
        $this->set('busq', $busq);
        $this->bloquear_buscador();
        $this->Vista->title("Listado de Movimientos SAP");
    }

    public function filtro() {
        $this->Vista->title('FILTRO MOVIMIENTOS SAP');

        $this->bloquear_buscador();
        $tiendas = $this->Session->read('tiendas_disponibles');
        $listaTiendas = $this->Maestro->listar_tienda_usuarios($tiendas);
        $listaTiendasPermitidas = $this->Util->tiendasActivas($listaTiendas);
        $this->set('listaTiendas', $listaTiendasPermitidas);
    }

    public function movimientos($busq = null, $datosFiltro = null) {
        $this->bloquear_buscador();
        if (!empty($datosFiltro)) {
            $this->request->data = $this->serializador($datosFiltro, 1);
        }
        extract($this->request->data);
        $listaCentros = $this->Tienda->find('list', array('fields' => array('codigo', 'nombre'), 'conditions' => array('Tienda.id >' => '0'), 'order' => 'Tienda.id'));
        $listaTipos = $this->TipoMovimiento->find('list', array('fields' => array('codigo', 'nombre'), 'conditions' => array('TipoMovimiento.id >' => '0'), 'order' => 'TipoMovimiento.id'));
        $this->Tienda->virtualFields['nombrecompleto'] = 'Tienda.codigo || \'-\' || Tienda.nombre';
        $listaTiendas = $this->Tienda->find('list', array('fields' => array('id', 'nombrecompleto'), 'conditions' => array('Tienda.id >' => '0', 'Tienda.estatus' => 1), 'order' => 'Tienda.id'));
        $this->set('tienda_oculta', $listaTiendas);
        if (empty($this->request->data['tienda_id'])) { //Todas
            $this->Vista->mensaje("Debe elegir al menos una Tienda", 'ERROR');
            $this->render('index');
        } else {
            $this->set('est_doc', $estatus);
            $ids_tienda = $this->request->data['tienda_id'];
            if (!empty($desde) && !empty($hasta)) {
                $desde = $this->Interfaz->fecha($desde);
                $hasta = $this->Interfaz->fecha($hasta);
                if (empty($estatus)) {
                    $sql = "select * from fnc_buscar_movimientos_interfaz(%tienda_id%,'$desde','$hasta') as (idarch bigint, fecmov  timestamp without time zone, nrodoc  character varying(15), obsmov character varying(100), cenmov character varying(4), tipmov character varying(3), cenrec character varying(4), fecha character varying(10))";
                } else {
                    $sql = "select * from fnc_buscar_movimientos_interfaz(%tienda_id%,'$desde','$hasta','$estatus') as (idarch bigint, fecmov  timestamp without time zone, nrodoc  character varying(15), obsmov character varying(100), cenmov character varying(4), tipmov character varying(3), cenrec character varying(4), fecha character varying(10))";
                }
            } else {
                if (empty($estatus)) {
                    $sql = "select * from fnc_buscar_movimientos_interfaz(%tienda_id%) as (idarch bigint, fecmov  timestamp without time zone, nrodoc  character varying(15), obsmov character varying(100), cenmov character varying(4), tipmov character varying(3), cenrec character varying(4), fecha character varying(10))";
                } else {
                    $sql = "select * from fnc_buscar_movimientos_interfaz(%tienda_id%,'$estatus') as (idarch bigint, fecmov  timestamp without time zone, nrodoc  character varying(15), obsmov character varying(100), cenmov character varying(4), tipmov character varying(3), cenrec character varying(4), fecha character varying(10))";
                }
            }
            $datos = $this->Maestro->sql_tiendas($sql, $ids_tienda, '%tienda_id%');
            $this->set('data', $datos);
            $this->set('dataSerializada', $this->serializador($datos, 2));
            $this->set('ids_tienda', $ids_tienda);
            $this->set('listaCentros', $listaCentros);
            $this->set('listaTipos', $listaTipos);
            $this->set('busq', $busq);
            $this->set('datosFiltro', $this->serializador($this->request->data, 2));
            if (isset($vent_filtro) && count($datos) > 0 && empty($datosFiltro))
                $this->Vista->cerrar_ventana($vent_filtro);
        }
    }

    public function ver($tienda = null, $documento = null, $esta = 'N', $botonGuardar = 0, $datosFiltro = null) {
        $listaTipos = $this->TipoMovimiento->find('list', array('fields' => array('codigo', 'nombre'), 'conditions' => array('TipoMovimiento.id >' => '0'), 'order' => 'TipoMovimiento.id'));
        $tienda = $this->Interfaz->id($tienda);
        $documento = $this->Interfaz->id($documento);
        $sql = "select * FROM fnc_buscar_detalle_movimientos_interfaz('$tienda','$documento','$esta') AS (idarchmov bigint, idarch bigint, fecmov timestamp without time zone, nrodoc character varying(15), obsmov character varying(100), codart character varying(18), cenmov character varying(4), tipmov character varying(3), canmov double precision, codunimed character varying(6), cenrec character varying(4), stareg character(1), fechasap character varying(10), obsdet character varying(50))";
        $tiendaPunto = $this->TiendaLocal->find('first', array('fields' => 'TiendaLocal.base_datos, TiendaLocal.codigo, TiendaLocal.nombre', 'conditions' => array('TiendaLocal.id' => $tienda)));
        $BdPunto = $tiendaPunto['TiendaLocal']['base_datos'];
        $ObjMovimientoDet = $this->Maestro->modelo('punto', 'MovimientoDetalle', $BdPunto);
        $datos = $this->Banco->query($sql);
        if(empty($datos)) {
            $this->Vista->mensaje('Este documento ya ha sido procesado', 'ERROR');
            $this->render('../Tp/mensajes');
        }
        $listadoMaterial = $ObjMovimientoDet->find('all', array('fields' => array('MovimientoDetalle.material_id', 'MovimientoDetalle.cantidad'), 'conditions' => array('Movimiento.documento' => $documento)));
        foreach($listadoMaterial as $valor) {
            $codMaterial = $this->Material->find('first', array('fields' => 'Material.codigo', 'conditions' => array('Material.id' => $valor['MovimientoDetalle']['material_id'])));
            $listadoMatFinal[$codMaterial['Material']['codigo']] = $valor['MovimientoDetalle']['cantidad'];
        }
        $this->set('data', $datos);
        $this->set('listaTipos', $listaTipos);
        $this->set('botonGuardar', $botonGuardar);
        $this->set('botonGuardar', $botonGuardar);
        $this->set('tienda', $tienda);
        $this->set('documento', $documento);
        $this->set('datosFiltro', $datosFiltro);
        $this->set('listadoMatFinal', $listadoMatFinal);
    }

    public function actualizar($tienda = null, $documento = null, $accion = null, $datosFiltro = null) {
        extract($this->request->data);
        $tienda = $this->Interfaz->id($tienda);
        $documento = $this->Interfaz->id($documento);
        if ($accion == 'B') {
            $sql = "select fnc_actualizar_detalle_movimientos_interfaz('$tienda','$documento','$accion')";
            $datos = $this->Banco->query($sql);
            $resultado = explode('|', $datos[0][0]['fnc_actualizar_detalle_movimientos_interfaz']);
            if ($resultado[0] == 'TRUE')
                $this->Vista->mensaje($resultado[1], 'EXITO');
            else
                $this->Vista->mensaje($resultado[1], 'ERROR');
        }
        else {
            //DARWIN
            $listaTipos = $this->TipoMovimiento->find('all', array('fields' => array('nombre', 'codigo', 'id'), 'conditions' => array('TipoMovimiento.id >' => '0'), 'order' => 'TipoMovimiento.id'));
            foreach ($listaTipos as $valor) {
                $datoTipo[$valor['TipoMovimiento']['codigo']]['nombre'] = $valor['TipoMovimiento']['nombre'];
                $datoTipo[$valor['TipoMovimiento']['codigo']]['id'] = $valor['TipoMovimiento']['id'];
            }
            $sql = "select * FROM fnc_buscar_detalle_movimientos_interfaz('$tienda','$documento') 
                AS (idarchmov bigint, idarch bigint, fecmov timestamp without time zone, nrodoc character varying(15), obsmov character varying(100), codart character varying(18), cenmov character varying(4), tipmov character varying(3), canmov double precision, codunimed character varying(6), cenrec character varying(4), stareg character(1), fechasap character varying(10), obsdet character varying(50))";
            $datos = $this->Banco->query($sql);
            $dato_mov = $datos[0][0];
            $f_aux = split(' ', $dato_mov['fecmov']);
            $fs = substr($dato_mov['fechasap'], 0, 4) . '-' . substr($dato_mov['fechasap'], 4, 2) . '-' . substr($dato_mov['fechasap'], 6, 2);
            $Movimiento['Movimiento']['tipo_movimiento_id'] = $datoTipo[$dato_mov['tipmov']]['id'];
            $Movimiento['Movimiento']['fecha'] = $f_aux[0];
            $Movimiento['Movimiento']['fecha_movimiento'] = $fs;
            $Movimiento['Movimiento']['cantidad'] = count($datos);
            $Movimiento['Movimiento']['usuario_id'] = $this->Interfaz->id($this->Session->read('usuario_id'));
            $Movimiento['Movimiento']['documento'] = $dato_mov['nrodoc'];
            $Movimiento['Movimiento']['observacion'] = (empty($dato_mov['obsmov'])) ? $dato_mov['obsdet'] : $dato_mov['obsmov'];
            $BdPunto = $this->TiendaLocal->find('first', array('fields' => 'TiendaLocal.base_datos, TiendaLocal.codigo', 'conditions' => array('TiendaLocal.id' => $tienda)));
            $ObjMovimientoDetalle = $this->Maestro->modelo('punto', 'MovimientoDetalle', $BdPunto['TiendaLocal']['base_datos']);
            $ObjMovimiento = $this->Maestro->modelo('punto', 'Movimiento', $BdPunto['TiendaLocal']['base_datos']);
            $ban = 1;
            $ObjMovimientoDetalle->query('BEGIN WORK');
            if ($ObjMovimiento->save($Movimiento)) {
                $id_mov = $ObjMovimiento->id;
                $msj = "ES EL INICIO";
                $cambios = array();
                foreach ($datos as $indice => $det_mov) {
                    $id_mate = $this->Material->find('first', array('fields' => 'Material.id', 'conditions' => array('Material.codigo' => $det_mov[0]['codart'])));
                    if ($det_mov[0]['canmov'] < 0) {
                        $cantidad = $det_mov[0]['canmov'] * -1;
                        $sql = "select fnc_obtener_existencia_material(" . $id_mate['Material']['id'] . ") as existencia";
                        $existencia = $ObjMovimientoDetalle->query($sql);
                        $exi = $existencia[0][0]['existencia'];
                        if ($cantidad > $exi) {
                            $valido = 0;
                        } else {
                            $valido = 1;
                        }
                        $detalle = "SALIDA POR " . $datoTipo[$det_mov[0]['tipmov']]['nombre'] . " BAJO DOCUMENTO NRO " . $dato_mov['nrodoc'];
                    } else {
                        $valido = 1;
                        $cantidad = $det_mov[0]['canmov'];
                        $detalle = "ENTRADA POR " . $datoTipo[$det_mov[0]['tipmov']]['nombre'] . " BAJO DOCUMENTO NRO " . $dato_mov['nrodoc'];
                    }
                    if ($valido) {
                        $DetMovimiento = null;
                        $DetMovimiento['MovimientoDetalle']['movimiento_id'] = $id_mov;
                        $DetMovimiento['MovimientoDetalle']['tipo_movimiento_id'] = $datoTipo[$det_mov[0]['tipmov']]['id'];
                        $DetMovimiento['MovimientoDetalle']['observacion'] = $det_mov[0]['obsdet'];
                        $DetMovimiento['MovimientoDetalle']['material_id'] = $id_mate['Material']['id'];
                        $DetMovimiento['MovimientoDetalle']['centro_recepcion'] = $det_mov[0]['cenrec'];
                        $DetMovimiento['MovimientoDetalle']['centro_origen'] = $det_mov[0]['cenmov'];
                        if(!isset($IDS_ENTRADA))
                            $IDS_ENTRADA = array();
                        $idProducto = array_search($det_mov[0]['codart'], $IDS_ENTRADA);
                        if($idProducto === false) {
                            $idProducto = array_search($det_mov[0]['codart'], $IDS_SALIDA);
                            $cant = ($SALIDA[$idProducto] > 0 ) ? ((-1) * $SALIDA[$idProducto]) : $SALIDA[$idProducto];
                        } else {
                            $cant = $ENTRADA[$idProducto];
                        }
                        if($idProducto !== false) {
                            if($cant != $det_mov[0]['canmov']) {
                                $cambios[$indice]['codigo'] = $det_mov[0]['codart'];
                                $cambios[$indice]['movimiento'] = $datoTipo[$det_mov[0]['tipmov']]['nombre'];
                                $cambios[$indice]['cant_usuario'] = $cant;
                                $cambios[$indice]['cant_documento'] = $det_mov[0]['canmov'];
                            }
                        }
                        $DetMovimiento['MovimientoDetalle']['cantidad'] = $cant; //$det_mov[0]['canmov'];
                        $DetMovimiento['MovimientoDetalle']['detalle'] = $detalle;
                        if ($ObjMovimientoDetalle->saveAll($DetMovimiento)) {
                            $sql = "UPDATE existencias SET existencia = existencia + " . $det_mov[0]['canmov'] . ", modificado = now() WHERE material_id = " . $id_mate['Material']['id'];
                            $res = $ObjMovimientoDetalle->query($sql);
                            $ban*=1;
                            $msj = "Guardo Detalles";
                        } else {
                            $ban = 0;
                            $msj = "Error Guardando movimiento para el Material " . $det_mov[0]['codart'];
                            break;
                        }
                    } else {
                        $ban = 0;
                        $msj = "La Cantidad Existente para el Material " . $det_mov[0]['codart'] . " es Insuficiente para Procesar El Despacho";
                        break;
                    }
                }
                $origen = $datos[0][0]['cenmov'];
                $destino = $datos[0][0]['cenrec'];
            }
            if ($ban) {
                $sql = "select fnc_actualizar_detalle_movimientos_interfaz('$tienda','$documento','L')";
                $datos = $this->Banco->query($sql);
                $resultado = explode('|', $datos[0][0]['fnc_actualizar_detalle_movimientos_interfaz']);
                if ($resultado[0] == 'TRUE') {
                    $c_t = substr($BdPunto['TiendaLocal']['codigo'], 1);
                    $res = $ObjMovimientoDetalle->query("select fn_numero_movimiento('$c_t'::text, $id_mov) as res");
                    if ($res[0][0]['res']) {
                        $ObjMovimientoDetalle->query('COMMIT');
                        if(!empty($cambios)) {
                            $indice = 1;
                            $tabla = "<table border=1 align='center' style='width: 98%; border-spacing: 0; border-collapse: collapse;'>";
                            $tabla .= "<tr><th>Cod. Art&iacute;culo</th><th>Movimiento</th><th>SAP</th><th>ARAUCA</th><th>Diferencia</th></tr>";
                            foreach($cambios as $valor) {
                                if($valor['movimiento'] == 'Despacho') {
                                    $diferencia = (-1 * ($valor['cant_usuario'] - $valor['cant_documento']));
                                    if($diferencia > 0)
                                        $diferencia = "+" . $diferencia;
                                } else {
                                    $diferencia = '';
                                    if(($valor['cant_usuario'] - $valor['cant_documento']) > 0)
                                        $diferencia = "+";
                                    $diferencia .= ($valor['cant_usuario'] - $valor['cant_documento']);
                                }
                                $tabla .= "<tr><td align='center'>{$valor['codigo']}</td><td align='center'>{$valor['movimiento']}</td><td align='right'>{$valor['cant_documento']}</td><td align='right'>{$valor['cant_usuario']}</td><td align='right'>{$diferencia}</td></tr>";
                            }
                            $tabla .= "</table>";
                            $this->Email;
                            $variables = array("##MENSAJE##" => "Diferencias en el documento (<strong>$documento</strong>)<br/>",
                                "##CUERPO##" => $tabla,
                                "##CENTRO##" => "Origen ($origen) - Destino ($destino)",
                                "##IP##" => $_SERVER['REMOTE_ADDR'],
                                "##USUARIO##" => "{$_SESSION['nombre_usuario']} ({$_SESSION['username']})",
                                "##FECHA##" => date('d-m-Y h:m:s A'));

                            foreach ($variables as $indice => $valor) {
                                $this->Email->setVariable($indice, $valor);
                            }

                            $estado = $this->Email->enviar($de = array('nombre' => $_SESSION['EMAIL_FROM_NAME'], 'email' => $_SESSION['EMAIL_FROM']), $_SESSION['listaCorreos'], 'MOVIMIENTOS', null, null, array(array('imagen' => ROOT . DS . WEBROOT_DIR . DS . 'img' . DS . 'email_header.jpg', 'etiqueta' => 'cabecera', 'tipo' => 'image/jpg')));
                        }
                        $this->Vista->mensaje($resultado[1], 'EXITO');
                        $this->Vista->cerrar_ventana($vent_ver);
                    } else {
                        $ObjMovimientoDetalle->query('ROLLBACK');
                        $sql = "select fnc_actualizar_detalle_movimientos_interfaz('$tienda','$documento','N')";
                        $datos = $this->Banco->query($sql);
                        $this->Vista->mensaje($resultado[1], 'ERROR');
                        $ObjMovimientoDetalle->deleteAll(array("MovimientoDetalle.movimiento_id" => $id_mov));
                        $ObjMovimiento->deleteAll(array("Movimiento.id" => $id_mov));
                    }
                } else {
                    $ObjMovimientoDetalle->query('ROLLBACK');
                    $ObjMovimientoDetalle->deleteAll(array("MovimientoDetalle.movimiento_id" => $id_mov));
                    $ObjMovimiento->deleteAll(array("Movimiento.id" => $id_mov));
                    $this->Vista->mensaje("OCURRIO UN ERROR GENERANDO NUMERO DE MOVIMIENTO", 'ERROR');
                }
            } else {
                $ObjMovimientoDetalle->query('ROLLBACK');
                $ObjMovimientoDetalle->deleteAll(array("MovimientoDetalle.movimiento_id" => $id_mov));
                $ObjMovimiento->deleteAll(array("Movimiento.id" => $id_mov));
                $this->Vista->mensaje($msj, 'ERROR');
            }
        }
        $this->movimientos(null, $datosFiltro);
        $this->render('movimientos');
    }

    public function movimiento_inventarios($busq = null) {
        //$this->permisos_menu_individual('Movimientos de Materiales'); ///BUSCA LOS PERMISOS QUE SE UTILIZARAN EN LA VISTA

        $this->bloquear_buscador();
        $this->set('busq', $busq);
        $this->Vista->title("Listado de Movimientos Inventario");
    }

    public function existencias_actuales($busq = null) {
        //$this->permisos_menu_individual('Movimientos de Materiales'); ///BUSCA LOS PERMISOS QUE SE UTILIZARAN EN LA VISTA

        $this->bloquear_buscador();
        $this->set('busq', $busq);
        $this->Vista->title("Existencias Actuales");
    }

    public function existencias_fechas($busq = null) {
        //$this->permisos_menu_individual('Movimientos de Materiales'); ///BUSCA LOS PERMISOS QUE SE UTILIZARAN EN LA VISTA

        $this->bloquear_buscador();
        $this->set('busq', $busq);
        $this->Vista->title("Existencias por fecha");
    }

    public function filtro_movimiento_inventarios() {
        $this->bloquear_buscador();
        $tiendas = $this->Session->read('tiendas_disponibles');
        $this->Vista->title('FILTRO MOVIMIENTOS INVENTARIO');
        $listaTiendas = $this->Maestro->listar_tienda_usuarios($tiendas);
        $this->set('listaTiendas', $listaTiendas);
        $listaTiendasTodas = $this->Maestro->listar_tienda_todas();
        $this->set('listaTiendasTodas', $listaTiendasTodas);
        $listaMovimientos = $this->Maestro->listar_tipo_movimiento();
        $this->set('listaMovimientos', $listaMovimientos);
    }

    public function filtro_existencias_actuales() {
        $this->bloquear_buscador();
        $this->Vista->title('FILTRO EXISTENCIAS ACTUALES');

        $tiendas = $this->Session->read('tiendas_disponibles');
        $listaTiendas = $this->Maestro->listar_tienda_usuarios($tiendas);
        $listaTiendasPermitidas = $this->Util->tiendasActivas($listaTiendas);
        $this->set('listaTiendas', $listaTiendasPermitidas);

        $listaClasificaciones = $this->Clasificacion->find('list', array('fields' => 'Clasificacion.id, Clasificacion.nombre', 'conditions' => array('Clasificacion.id >' => '0', 'Clasificacion.estatus' => 1), 'order' => 'Clasificacion.nombre'));
        $this->set('listaClasificaciones', $listaClasificaciones);
    }

    public function filtro_existencias_fechas() {
        $this->bloquear_buscador();
        $this->Vista->title('FILTRO EXISTENCIAS POR FECHA');
        
        $tiendas = $this->Session->read('tiendas_disponibles');
        $listaTiendas = $this->Maestro->listar_tienda_usuarios($tiendas);
        $listaTiendasPermitidas = $this->Util->tiendasActivas($listaTiendas);
        $this->set('listaTiendas', $listaTiendasPermitidas);

        $listaClasificaciones = $this->Clasificacion->find('list', array('fields' => 'Clasificacion.id, Clasificacion.nombre', 'conditions' => array('Clasificacion.id >' => '0', 'Clasificacion.estatus' => 1), 'order' => 'Clasificacion.nombre'));
        $this->set('listaClasificaciones', $listaClasificaciones);
    }

    public function buscar_movimientos_inventarios($busq = null, $datosFiltro = null) {
        $this->bloquear_buscador();
        if (!empty($datosFiltro)) {
            $this->request->data = $this->serializador($datosFiltro, 1);
        }

        extract($this->request->data);
        if (empty($this->request->data['receptor'])) { //Todas
            $this->Vista->mensaje("Debe elegir al menos un Centro Receptor", 'ERROR');
            $this->render('movimiento_inventarios');
        } else {
            $this->set('datosFiltro', $this->serializador($this->request->data, 2));

            if (empty($origen[0])) {
                $cod_rec = $this->Tienda->find('all', array('conditions' => array('Tienda.id > ' => 0), 'fields' => array('Tienda.codigo'), 'order' => 'Tienda.codigo'));
            } else {
                $cod_rec = $this->Tienda->find('all', array('conditions' => array('Tienda.id ' => $origen), 'fields' => array('Tienda.codigo'), 'order' => 'Tienda.codigo'));
            }
            foreach ($cod_rec as $value) {
                $cod_o[] = $value['Tienda']['codigo'];
            }
            $condi = array();
            $condi['MovimientoDetalle.centro_origen'] = $cod_o;

            if (!empty($desde) && !empty($hasta)) {
                $desde = $this->Interfaz->fecha($desde);
                $hasta = $this->Interfaz->fecha($hasta);
                $condi['Movimiento.fecha_movimiento BETWEEN ? and ?'] = array($desde, $hasta);
            } else if (!empty($desde) && empty($hasta)) {
                $desde = $this->Interfaz->fecha($desde);
                $condi['Movimiento.fecha_movimiento'] = $desde;
            }

            if (!empty($documento)) {
                $condi['Movimiento.documento ilike'] = "%$desde%";
            }

            if (!empty($tipo_movimiento)) {
                $condi['MovimientoDetalle.tipo_movimiento_id'] = $tipo_movimiento;
            }
            if (!empty($codigo)) {
                $x = explode(',', substr($codigo, 0, -1));
                $id_mat = $this->Material->find('all', array('conditions' => array('Material.codigo' => $x), 'fields' => array('Material.id')));
                foreach ($id_mat as $value) {
                    $id_mf[] = $value['Material']['id'];
                }
                $condi['MovimientoDetalle.material_id'] = $id_mf;
            }

            $campos = array('MovimientoDetalle.id', 'MovimientoDetalle.centro_recepcion', 'MovimientoDetalle.centro_origen', 'MovimientoDetalle.material_id', 'MovimientoDetalle.cantidad', 'MovimientoDetalle.observacion', 'MovimientoDetalle.detalle', 'MovimientoDetalle.tipo_movimiento_id', 'Movimiento.fecha', 'Movimiento.fecha_movimiento', 'Movimiento.usuario_id', 'Movimiento.documento', 'Movimiento.observacion', 'Movimiento.numero');
            $cod_rec = $this->Tienda->find('all', array('conditions' => array('Tienda.id' => $receptor), 'fields' => array('Tienda.id', 'Tienda.codigo'), 'order' => 'Tienda.codigo'));
            $campos_mat = array('Material.codigo', 'Material.nombre');
            foreach ($cod_rec as $value) {
                $cod_r = NULL;
                $cod_r[] = $value['Tienda']['codigo'];
                $condi['MovimientoDetalle.centro_recepcion'] = $cod_r;
                $BdPunto = $this->TiendaLocal->find('first', array('fields' => 'TiendaLocal.base_datos, TiendaLocal.codigo', 'conditions' => array('TiendaLocal.id' => $value['Tienda']['id'])));
                $ObjMovimientoDetalle = $this->Maestro->modelo('punto', 'MovimientoDetalle', $BdPunto['TiendaLocal']['base_datos']);
                $datos[$value['Tienda']['codigo']] = $ObjMovimientoDetalle->find('all', array('conditions' => $condi, 'fields' => $campos, 'limit' => 1000));
                //pr($datos);
                for ($y = 0; $y < count($datos[$value['Tienda']['codigo']]); $y++) {
                    $material = $this->Material->find('first', array('conditions' => array('Material.id' => $datos[$value['Tienda']['codigo']][$y]['MovimientoDetalle']['material_id']), 'fields' => $campos_mat));
                    $datos[$value['Tienda']['codigo']][$y]['Material'] = $material['Material'];
                }
                $id_tiendas[$value['Tienda']['codigo']] = $value['Tienda']['id'];
            }

            if (count($datos) > 0) {
                $this->set('dataSerializada', $this->serializador($this->request->data, 2));
                $listaCentros = $this->Tienda->find('list', array('fields' => array('codigo', 'nombre'), 'conditions' => array('Tienda.id >' => '0'), 'order' => 'Tienda.id'));
                $listaTipos = $this->TipoMovimiento->find('list', array('fields' => array('id', 'nombre'), 'conditions' => array('TipoMovimiento.id >' => '0'), 'order' => 'TipoMovimiento.id'));
                $this->Tienda->virtualFields['nombrecompleto'] = 'Tienda.codigo || \'-\' || Tienda.nombre';
                $listaTiendas = $this->Tienda->find('list', array('fields' => array('codigo', 'nombrecompleto'), 'conditions' => array('Tienda.id >' => '0', 'Tienda.estatus' => 1), 'order' => 'Tienda.id'));
                $listaMovimientos = $this->Maestro->listar_tipo_movimiento();
                $this->set('listaMovimientos', $listaMovimientos);
                $this->set('tienda_ciclo', $cod_rec);
                $this->set('tienda_oculta', $listaTiendas);
                $this->set('data', $datos);
                $this->set('listaCentros', $listaCentros);
                $this->set('listaTipos', $listaTipos);
                $this->set('busq', $busq);
                $this->set('id_tiendas', $id_tiendas);
                if (isset($vent_filtro) && empty($datosFiltro)) {
                    $this->Vista->cerrar_ventana($vent_filtro);
                }
            } else {
                $this->render('movimiento_inventarios');
            }
        }
    }

    public function buscar_existencias_actuales($busq = null, $datosFiltro = null) {
        extract($this->request->data);
        $ban = 0;
        if (empty($this->request->data['receptor'])) { //Todas
            $this->Vista->mensaje("Debe elegir al menos un Centro Receptor", 'ERROR');
            $this->render('existencias_actuales');
        } else if (empty($clasificacion_id) && empty($subclasificacion_id) && empty($codigo)) {
            $this->Vista->mensaje("Debe elegir al menos un criterio de busqueda para material", 'ERROR');
            $this->render('existencias_actuales');
        } else {
            $sql = "select det.material_id,coalesce(sum(det.cantidad),0) as total FROM movimiento_detalles det , movimientos mov WHERE mov.fecha_movimiento BETWEEN '2000-01-01' AND  now()::date";

            if (!empty($subclasificacion_id)) {
                $id_mat = $this->Material->find('all', array('conditions' => array('Material.subclasificacion_id' => $subclasificacion_id), 'fields' => array('Material.id')));
                $ban = 1;
            } else {
                if (!empty($clasificacion_id)) {
                    $id_mat = $this->Material->find('all', array('conditions' => array('Material.clasificacion_id' => $clasificacion_id), 'fields' => array('Material.id')));
                    $ban = 1;
                }
            }
            if ($ban == 1) {
                foreach ($id_mat as $value) {
                    $id_mf[] = $value['Material']['id'];
                }
            }
            if (!empty($codigo)) {
                $x = explode(',', substr($codigo, 0, -1));
                $id_mat = $this->Material->find('all', array('conditions' => array('Material.codigo' => $x), 'fields' => array('Material.id')));
                foreach ($id_mat as $value) {
                    $id_mf[] = $value['Material']['id'];
                }
            }

            if (count($id_mf > 0)) {
                $a = "(";
                foreach ($id_mf as $valor) {
                    $a.= $valor . ',';
                }
                $a = substr($a, 0, -1) . ")";
                $sql.= " AND det.material_id in " . $a;
            }
            $sql.= " GROUP BY det.material_id ORDER BY det.material_id ";
            $campos = array('MovimientoDetalle.id', 'MovimientoDetalle.centro_recepcion', 'MovimientoDetalle.centro_origen', 'MovimientoDetalle.material_id', 'MovimientoDetalle.cantidad', 'MovimientoDetalle.observacion', 'MovimientoDetalle.detalle', 'MovimientoDetalle.tipo_movimiento_id', 'Movimiento.fecha', 'Movimiento.fecha_movimiento', 'Movimiento.usuario_id', 'Movimiento.documento', 'Movimiento.observacion', 'Movimiento.numero');
            $campos_mat = array('Material.codigo', 'Material.nombre', 'Clasificacion.nombre', 'Subclasificacion.nombre');
            $ids_tienda = $this->request->data['receptor'];
            $datos = $this->Maestro->sql_puntos($sql, $ids_tienda, '%tienda_id%');

            foreach ($ids_tienda as $valor) {
                for ($y = 0; $y < count($datos[$valor]); $y++) {

                    $material = $this->Material->find('first', array('conditions' => array('Material.id' => $datos[$valor][$y]['material_id']), 'fields' => $campos_mat));
                    $datos[$valor][$y]['codigo'] = $material['Material']['codigo'];
                    $datos[$valor][$y]['nombre'] = $material['Material']['nombre'];
                    $datos[$valor][$y]['clasificacion'] = $material['Clasificacion']['nombre'];
                    $datos[$valor][$y]['subclasificacion'] = $material['Subclasificacion']['nombre'];
                }
            }

            if (count($datos) > 0) {
                $this->set('datosFiltro', $this->serializador($this->request->data, 2));
                $this->Tienda->virtualFields['nombrecompleto'] = 'Tienda.codigo || \'-\' || Tienda.nombre';
                $listaTiendas = $this->Tienda->find('list', array('fields' => array('id', 'nombrecompleto'), 'conditions' => array('Tienda.id >' => '0', 'Tienda.estatus' => 1), 'order' => 'Tienda.id'));
                $this->set('tienda_oculta', $listaTiendas);
                $this->set('data', $datos);

                $this->set('busq', $busq);
                $this->set('id_tiendas', $ids_tienda);
                if (isset($vent_filtro) && empty($datosFiltro)) {
                    $this->Vista->cerrar_ventana($vent_filtro);
                }
            } else {
                $this->render('existencias_actuales');
            }
        }
    }

    public function buscar_existencias_fechas($busq = null, $datosFiltro = null) {
        extract($this->request->data);
        $ban = 0;
        if (empty($this->request->data['receptor'])) {
            $this->Vista->mensaje("Debe elegir al menos un Centro Receptor", 'ERROR');
            $this->render('existencias_fechas');
        } else if (empty($clasificacion_id) && empty($subclasificacion_id) && empty($codigo)) {
            $this->Vista->mensaje("Debe elegir al menos un criterio de busqueda para material", 'ERROR');
            $this->render('existencias_fechas');
        } else if (empty($desde) || empty($hasta)) {
            $this->Vista->mensaje("Las fechas son obligatorias", 'ERROR');
            $this->render('existencias_fechas');
        } else {
            $desde = $this->Interfaz->fecha($desde);
            $hasta = $this->Interfaz->fecha($hasta);
            $hasta_stop = strtotime('-1 day', strtotime($desde));
            $hasta_stop = date('Y-m-d', $hasta_stop);

            if (!empty($subclasificacion_id)) {
                $id_mat = $this->Material->find('all', array('conditions' => array('Material.subclasificacion_id' => $subclasificacion_id), 'fields' => array('Material.id')));
                $ban = 1;
            } else {
                if (!empty($clasificacion_id)) {
                    $id_mat = $this->Material->find('all', array('conditions' => array('Material.clasificacion_id' => $clasificacion_id), 'fields' => array('Material.id')));
                    $ban = 1;
                }
            }
            if ($ban == 1) {
                foreach ($id_mat as $value) {
                    $id_mf[] = $value['Material']['id'];
                }
            }
            if (!empty($codigo)) {
                $x = explode(',', substr($codigo, 0, -1));
                $id_mat = $this->Material->find('all', array('conditions' => array('Material.codigo' => $x), 'fields' => array('Material.id')));
                foreach ($id_mat as $value) {
                    $id_mf[] = $value['Material']['id'];
                    $idMat = $value['Material']['id'];
                }
            }
            if (count($id_mf > 0)) {
                $a = "";
                foreach ($id_mf as $valor) {
                    $a.= $valor . ',';
                }
                $a = substr($a, 0, -1);
            }
            $campos_mat = array('Material.id', 'Material.codigo', 'Material.nombre', 'Clasificacion.nombre', 'Subclasificacion.nombre');
            $listaMateriales = $this->Material->find('all', array('conditions' => array('Material.id' => $id_mf), 'fields' => $campos_mat));
            foreach ($listaMateriales as $y) {
                $arregloMaterial[$y['Material']['id']]['codigo'] = $y['Material']['codigo'];
                $arregloMaterial[$y['Material']['id']]['nombre'] = $y['Material']['nombre'];
                $arregloMaterial[$y['Material']['id']]['clasificacion'] = $y['Clasificacion']['nombre'];
                $arregloMaterial[$y['Material']['id']]['subclasificacion'] = $y['Subclasificacion']['nombre'];
            }
            $ids_tienda = $this->request->data['receptor'];
            $total_final=0;
            $sql_inicial = "select * from fnc_buscar_existencia_fecha('$desde', '$hasta', '$a') as (material_id bigint, inicial double precision,fecha double precision,bloqueos double precision); ";
            $datos_i = $this->Maestro->sql_puntos($sql_inicial, $ids_tienda, '%tienda_id%');
            foreach ($ids_tienda as $tienda) {
                foreach ($id_mf as $material) {
                    $canInicial = 0; $canFecha = 0; $canBloqueos = 0;
                    foreach ($datos_i[$tienda] as $y => $value) {
                        if (isset($value['material_id']) && ($material == $value['material_id'])) {
                            $canInicial = $value['inicial'];
                            $canFecha = $value['fecha'];
                            $canBloqueos = $value['bloqueos'];
                            unset($datos_i[$tienda][$y]);
                            break;
                        }
                    }
                    if ($canInicial != 0 || $canFecha != 0 || $canBloqueos != 0) {
                        $arreglo[$tienda][$material]['id'] = $material;
                        $arreglo[$tienda][$material]['inicial'] = $canInicial;
                        $arreglo[$tienda][$material]['fecha'] = $canFecha;
                        $arreglo[$tienda][$material]['bloqueos'] = $canBloqueos;
                        $arreglo[$tienda][$material]['codigo'] = $arregloMaterial[$material]['codigo'];
                        $arreglo[$tienda][$material]['nombre'] = $arregloMaterial[$material]['nombre'];
                        $arreglo[$tienda][$material]['clasificacion'] = $arregloMaterial[$material]['clasificacion'];
                        $arreglo[$tienda][$material]['subclasificacion'] = $arregloMaterial[$material]['subclasificacion'];
                        $total_final++;                        
                    }
                }
            }
            if (count($arreglo) > 0) {
                $this->set('datosFiltro', $this->serializador($this->request->data, 2));
                $this->Tienda->virtualFields['nombrecompleto'] = 'Tienda.codigo || \'-\' || Tienda.nombre';
                $listaTiendas = $this->Tienda->find('list', array('fields' => array('id', 'nombrecompleto'), 'conditions' => array('Tienda.id >' => '0', 'Tienda.estatus' => 1), 'order' => 'Tienda.id'));
                $this->set('tienda_oculta', $listaTiendas);
                $this->set('data', $arreglo);
                $this->set('busq', $busq);
                $this->set('id_tiendas', $ids_tienda);
                if (isset($vent_filtro) && empty($datosFiltro)) {
                    $this->Vista->cerrar_ventana($vent_filtro);
                }
            } else {
                $this->render('existencias_fechas');
            }
        }
    }

    public function reporte_excel($formato = 1, $datosFiltro = null) {
        if (!empty($datosFiltro)) {
            $this->request->data = $this->serializador($datosFiltro, 1);
        }
        extract($this->request->data);
        if (empty($origen[0])) {
            $cod_rec = $this->Tienda->find('all', array('conditions' => array('Tienda.id > ' => 0), 'fields' => array('Tienda.codigo'), 'order' => 'Tienda.codigo'));
        } else {
            $cod_rec = $this->Tienda->find('all', array('conditions' => array('Tienda.id ' => $origen), 'fields' => array('Tienda.codigo'), 'order' => 'Tienda.codigo'));
        }
        foreach ($cod_rec as $value) {
            $cod_o[] = $value['Tienda']['codigo'];
        }
        $condi = array();
        $condi['MovimientoDetalle.centro_origen'] = $cod_o;

        if (!empty($desde) && !empty($hasta)) {
            $desde = $this->Interfaz->fecha($desde);
            $hasta = $this->Interfaz->fecha($hasta);
            $condi['Movimiento.fecha_movimiento BETWEEN ? and ?'] = array($desde, $hasta);
        } else if (!empty($desde) && empty($hasta)) {
            $desde = $this->Interfaz->fecha($desde);
            $condi['Movimiento.fecha_movimiento'] = $desde;
        }

        if (!empty($documento)) {
            $condi['Movimiento.documento ilike'] = "%$desde%";
        }

        if (!empty($tipo_movimiento)) {
            $condi['MovimientoDetalle.tipo_movimiento_id'] = $tipo_movimiento;
        }
        if (!empty($codigo)) {
            $x = explode(',', substr($codigo, 0, -1));
            $id_mat = $this->Material->find('all', array('conditions' => array('Material.codigo' => $x), 'fields' => array('Material.id')));
            foreach ($id_mat as $value) {
                $id_mf[] = $value['Material']['id'];
            }
            $condi['MovimientoDetalle.material_id'] = $id_mf;
        }

        $campos = array('MovimientoDetalle.id', 'MovimientoDetalle.centro_recepcion', 'MovimientoDetalle.centro_origen', 'MovimientoDetalle.material_id', 'MovimientoDetalle.cantidad', 'MovimientoDetalle.observacion', 'MovimientoDetalle.detalle', 'MovimientoDetalle.tipo_movimiento_id', 'Movimiento.fecha', 'Movimiento.fecha_movimiento', 'Movimiento.usuario_id', 'Movimiento.documento', 'Movimiento.observacion', 'Movimiento.numero');
        $cod_rec = $this->Tienda->find('all', array('conditions' => array('Tienda.id' => $receptor), 'fields' => array('Tienda.id', 'Tienda.codigo'), 'order' => 'Tienda.codigo'));
        $campos_mat = array('Material.codigo', 'Material.nombre');
        foreach ($cod_rec as $value) {
            $cod_r = NULL;
            $cod_r[] = $value['Tienda']['codigo'];
            $condi['MovimientoDetalle.centro_recepcion'] = $cod_r;
            $BdPunto = $this->TiendaLocal->find('first', array('fields' => 'TiendaLocal.base_datos, TiendaLocal.codigo', 'conditions' => array('TiendaLocal.id' => $value['Tienda']['id'])));
            $ObjMovimientoDetalle = $this->Maestro->modelo('punto', 'MovimientoDetalle', $BdPunto['TiendaLocal']['base_datos']);
            $datos[$value['Tienda']['codigo']] = $ObjMovimientoDetalle->find('all', array('conditions' => $condi, 'fields' => $campos));
            for ($y = 0; $y < count($datos[$value['Tienda']['codigo']]); $y++) {
                $material = $this->Material->find('first', array('conditions' => array('Material.id' => $datos[$value['Tienda']['codigo']][$y]['MovimientoDetalle']['material_id']), 'fields' => $campos_mat));
                $datos[$value['Tienda']['codigo']][$y]['Material'] = $material['Material'];
            }
            $id_tiendas[$value['Tienda']['codigo']] = $value['Tienda']['id'];
        }

        if (count($datos) > 0) {
            $this->set('dataSerializada', $this->serializador($this->request->data, 2));
            $listaCentros = $this->Tienda->find('list', array('fields' => array('codigo', 'nombre'), 'conditions' => array('Tienda.id >' => '0'), 'order' => 'Tienda.id'));
            $listaTipos = $this->TipoMovimiento->find('list', array('fields' => array('id', 'nombre'), 'conditions' => array('TipoMovimiento.id >' => '0'), 'order' => 'TipoMovimiento.id'));
            $this->Tienda->virtualFields['nombrecompleto'] = 'Tienda.codigo || \'-\' || Tienda.nombre';
            $listaTiendas = $this->Tienda->find('list', array('fields' => array('codigo', 'nombrecompleto'), 'conditions' => array('Tienda.id >' => '0', 'Tienda.estatus' => 1), 'order' => 'Tienda.id'));
            $listaMovimientos = $this->Maestro->listar_tipo_movimiento();
            $this->set('listaMovimientos', $listaMovimientos);
            $this->set('tienda_ciclo', $cod_rec);
            $this->set('tienda_oculta', $listaTiendas);
            $this->set('data', $datos);
            $this->set('listaCentros', $listaCentros);
            $this->set('listaTipos', $listaTipos);
            $this->set('id_tiendas', $id_tiendas);
            $this->set('formato', $formato);
            $this->set('tipoReporte', $tipoReporte);
        } else {
            $this->render('movimiento_inventarios');
        }
    }

    public function reporte_excel_existencias_actuales($formato = 1, $datosFiltro = null) {
        if (!empty($datosFiltro)) {
            $this->request->data = $this->serializador($datosFiltro, 1);
        }
        extract($this->request->data);
        $ban = 0;
        if (empty($this->request->data['receptor'])) { //Todas
            $this->Vista->mensaje("Debe elegir al menos un Centro Receptor", 'ERROR');
            $this->render('existencias_actuales');
        } else if (empty($clasificacion_id) && empty($subclasificacion_id) && empty($codigo)) {
            $this->Vista->mensaje("Debe elegir al menos un criterio de busqueda para material", 'ERROR');
            $this->render('existencias_actuales');
        } else {
            $sql = "select det.material_id,coalesce(sum(det.cantidad),0) as total FROM movimiento_detalles det , movimientos mov WHERE mov.fecha_movimiento BETWEEN '2000-01-01' AND  now()::date";

            if (!empty($subclasificacion_id)) {
                $id_mat = $this->Material->find('all', array('conditions' => array('Material.subclasificacion_id' => $subclasificacion_id), 'fields' => array('Material.id')));
                $ban = 1;
            } else {
                if (!empty($clasificacion_id)) {
                    $id_mat = $this->Material->find('all', array('conditions' => array('Material.clasificacion_id' => $clasificacion_id), 'fields' => array('Material.id')));
                    $ban = 1;
                }
            }
            if ($ban == 1) {
                foreach ($id_mat as $value) {
                    $id_mf[] = $value['Material']['id'];
                }
            }
            if (!empty($codigo)) {
                $x = explode(',', substr($codigo, 0, -1));
                $id_mat = $this->Material->find('all', array('conditions' => array('Material.codigo' => $x), 'fields' => array('Material.id')));
                foreach ($id_mat as $value) {
                    $id_mf[] = $value['Material']['id'];
                    $idMat = $value['Material']['id'];
                }
            }

            if (count($id_mf > 0)) {
                $a = "(";
                foreach ($id_mf as $valor) {
                    $a.= $valor . ',';
                }
                $a = substr($a, 0, -1) . ")";
                $sql.= " AND det.material_id in " . $a;
            }
            $sql.= " GROUP BY det.material_id ORDER BY det.material_id ";
            $campos = array('MovimientoDetalle.id', 'MovimientoDetalle.centro_recepcion', 'MovimientoDetalle.centro_origen', 'MovimientoDetalle.material_id', 'MovimientoDetalle.cantidad', 'MovimientoDetalle.observacion', 'MovimientoDetalle.detalle', 'MovimientoDetalle.tipo_movimiento_id', 'Movimiento.fecha', 'Movimiento.fecha_movimiento', 'Movimiento.usuario_id', 'Movimiento.documento', 'Movimiento.observacion', 'Movimiento.numero');
            $campos_mat = array('Material.codigo', 'Material.nombre', 'Clasificacion.nombre', 'Subclasificacion.nombre');
            $ids_tienda = $this->request->data['receptor'];
            $datos = $this->Maestro->sql_puntos($sql, $ids_tienda, '%tienda_id%');

            foreach ($ids_tienda as $valor) {
                for ($y = 0; $y < count($datos[$valor]); $y++) {

                    $material = $this->Material->find('first', array('conditions' => array('Material.id' => $datos[$valor][$y]['material_id']), 'fields' => $campos_mat));
                    $datos[$valor][$y]['codigo'] = $material['Material']['codigo'];
                    $datos[$valor][$y]['nombre'] = $material['Material']['nombre'];
                    $datos[$valor][$y]['clasificacion'] = $material['Clasificacion']['nombre'];
                    $datos[$valor][$y]['subclasificacion'] = $material['Subclasificacion']['nombre'];
                }
            }

            if (count($datos) > 0) {
                $listaCodigo = $this->Tienda->find('list', array('fields' => array('id', 'codigo'), 'conditions' => array('Tienda.id >' => '0', 'Tienda.estatus' => 1), 'order' => 'Tienda.id'));
                $this->set('tienda_codigos', $listaCodigo);
                $this->Tienda->virtualFields['nombrecompleto'] = 'Tienda.codigo || \'-\' || Tienda.nombre';
                $listaTiendas = $this->Tienda->find('list', array('fields' => array('id', 'nombrecompleto'), 'conditions' => array('Tienda.id >' => '0', 'Tienda.estatus' => 1), 'order' => 'Tienda.id'));
                $this->set('tienda_oculta', $listaTiendas);
                $this->set('data', $datos);
                $this->set('busq', null);
                $this->set('id_tiendas', $ids_tienda);
                $this->set('formato', $formato);
                $this->set('tipoReporte', $tipoReporte);
            } else {
                $this->render('existencias_actuales');
            }
        }
    }

    public function ver_detalle_movimiento_inventario($idTienda, $idMovDet = null) {
        $idMovDet = $this->Interfaz->id($idMovDet);
        if (is_numeric($idMovDet)) {
            $idTienda = $this->Interfaz->id($idTienda);
            $BdPunto = $this->TiendaLocal->find('first', array('fields' => 'TiendaLocal.base_datos, TiendaLocal.codigo', 'conditions' => array('TiendaLocal.id' => $idTienda)));
            $ObjMovimientoDetalle = $this->Maestro->modelo('punto', 'MovimientoDetalle', $BdPunto['TiendaLocal']['base_datos']);
            $campos = array('MovimientoDetalle.id', 'MovimientoDetalle.centro_recepcion', 'MovimientoDetalle.centro_origen', 'MovimientoDetalle.material_id', 'MovimientoDetalle.cantidad', 'MovimientoDetalle.observacion', 'MovimientoDetalle.detalle', 'MovimientoDetalle.tipo_movimiento_id', 'Movimiento.fecha', 'Movimiento.fecha_movimiento', 'Movimiento.usuario_id', 'Movimiento.documento', 'Movimiento.observacion', 'Movimiento.numero');
            $datos = $ObjMovimientoDetalle->find('first', array('conditions' => array('MovimientoDetalle.id' => $idMovDet), 'fields' => $campos));
            $listaMovimientos = $this->Maestro->listar_tipo_movimiento();
            $this->TiendaLocal->virtualFields['nombrecompleto'] = 'TiendaLocal.codigo || \'-\' || TiendaLocal.nombre';
            $listaTiendas = $this->TiendaLocal->find('list', array('fields' => array('codigo', 'nombrecompleto'), 'conditions' => array('TiendaLocal.id >' => '0'), 'order' => 'TiendaLocal.codigo'));
            $campos = array('Material.codigo', 'Material.nombre', 'Clasificacion.codigo', 'Clasificacion.nombre', 'Subclasificacion.codigo', 'Subclasificacion.nombre');
            $material = $this->Material->find('first', array('conditions' => array('Material.id' => $datos['MovimientoDetalle']['material_id']), 'fields' => $campos));
            $campos = array('Usuario.usuario', 'Funcionario.nombre', 'Funcionario.apellido', 'Funcionario.cedula', 'Funcionario.celular', 'Funcionario.telefonoresidencial');
            $usuario = $this->Usuario->find('first', array('conditions' => array('Usuario.id' => $datos['Movimiento']['usuario_id']), 'fields' => $campos));
            $this->set('listaMovimientos', $listaMovimientos);
            $this->set('listaTiendas', $listaTiendas);
            $this->set('datos', $datos);
            $this->set('material', $material);
            $this->set('usuario', $usuario);
        } else {
            $this->Vista->mensaje('Estas Intentando Violar la Seguridad de Agropatria', 'ERROR');
            $this->render('../Tp/mensajes');
        }
    }

    public function buscar_material() {
        
    }

    public function listado_buscador_material($vent = null, $div = null, $para = null) {
        if (isset($para) && !empty($para)) {
            $condiciones['Material.id >'] = 0;
            $this->set('data', $this->Material->find('all', array('conditions' => array($condiciones, "OR" => array('Material.nombre ilike' => "%$para%", 'Material.codigo ilike' => "%$para%")), 'order' => 'Material.nombre', 'LIMIT' => 500)));
            $this->set('busq', $para);
            $this->set('vent', $vent);
        } else {
            $this->set('data', null);
            $this->set('busq', '');
            $this->set('vent', $vent);
        }
        echo "<script type='text/javascript'>document.getElementById('$div').style.display='block';</script>";
        $this->set('vent', $vent);
    }

    public function actualizar_material($codigo = null) {
        $codigo = $this->Interfaz->id($codigo);
        echo "<script type='text/javascript'>
            aux=document.getElementById('codigo').value;
            aux= aux +'$codigo'+ ',';
            document.getElementById('codigo').value=aux;</script>";
        $this->render("../" . PRINCIPAL . "/mensajes");
    }
    
    public function reporte_excel_existencias_fechas($formato = 1, $datosFiltro = null) {
        if (!empty($datosFiltro)) {
            $this->request->data = $this->serializador($datosFiltro, 1);
        }
        extract($this->request->data);
        $ban = 0;
        if (empty($this->request->data['receptor'])) {
            $this->Vista->mensaje("Debe elegir al menos un Centro Receptor", 'ERROR');
            $this->render('existencias_fechas');
        } else if (empty($clasificacion_id) && empty($subclasificacion_id) && empty($codigo)) {
            $this->Vista->mensaje("Debe elegir al menos un criterio de busqueda para material", 'ERROR');
            $this->render('existencias_fechas');
        } else if (empty($desde) || empty($hasta)) {
            $this->Vista->mensaje("Las fechas son obligatorias", 'ERROR');
            $this->render('existencias_fechas');
        } else {
            $desde = $this->Interfaz->fecha($desde);
            $hasta = $this->Interfaz->fecha($hasta);
            $hasta_stop = strtotime('-1 day', strtotime($desde));
            $hasta_stop = date('Y-m-d', $hasta_stop);
            if (!empty($subclasificacion_id)) {
                $id_mat = $this->Material->find('all', array('conditions' => array('Material.subclasificacion_id' => $subclasificacion_id), 'fields' => array('Material.id')));
                $ban = 1;
            } else {
                if (!empty($clasificacion_id)) {
                    $id_mat = $this->Material->find('all', array('conditions' => array('Material.clasificacion_id' => $clasificacion_id), 'fields' => array('Material.id')));
                    $ban = 1;
                }
            }
            if ($ban == 1) {
                foreach ($id_mat as $value) {
                    $id_mf[] = $value['Material']['id'];
                }
            }
            if (!empty($codigo)) {
                $x = explode(',', substr($codigo, 0, -1));
                $id_mat = $this->Material->find('all', array('conditions' => array('Material.codigo' => $x), 'fields' => array('Material.id')));
                foreach ($id_mat as $value) {
                    $id_mf[] = $value['Material']['id'];
                    $idMat = $value['Material']['id'];
                }
            }
            if (count($id_mf > 0)) {
                $a = "";
                foreach ($id_mf as $valor) {
                    $a.= $valor . ',';
                }
                $a = substr($a, 0, -1);
            }
            $campos_mat = array('Material.id', 'Material.codigo', 'Material.nombre', 'Clasificacion.nombre', 'Subclasificacion.nombre');
            $listaMateriales = $this->Material->find('all', array('conditions' => array('Material.id' => $id_mf), 'fields' => $campos_mat));
            foreach ($listaMateriales as $y) {
                $arregloMaterial[$y['Material']['id']]['codigo'] = $y['Material']['codigo'];
                $arregloMaterial[$y['Material']['id']]['nombre'] = $y['Material']['nombre'];
                $arregloMaterial[$y['Material']['id']]['clasificacion'] = $y['Clasificacion']['nombre'];
                $arregloMaterial[$y['Material']['id']]['subclasificacion'] = $y['Subclasificacion']['nombre'];
            }
            $ids_tienda = $this->request->data['receptor'];
            $total_final=0;
            $sql_inicial = "select * from fnc_buscar_existencia_fecha('$desde', '$hasta', '$a') as (material_id bigint, inicial double precision,fecha double precision,bloqueos double precision); ";
            $datos_i = $this->Maestro->sql_puntos($sql_inicial, $ids_tienda, '%tienda_id%');
            foreach ($ids_tienda as $tienda) {
                foreach ($id_mf as $material) {
                    $canInicial = 0; $canFecha = 0; $canBloqueos = 0;
                    foreach ($datos_i[$tienda] as $y => $value) {
                        if (isset($value['material_id']) && ($material == $value['material_id'])) {
                            $canInicial = $value['inicial'];
                            $canFecha = $value['fecha'];
                            $canBloqueos = $value['bloqueos'];
                            unset($datos_i[$tienda][$y]);
                            break;
                        }
                    }
                    if ($canInicial != 0 || $canFecha != 0 || $canBloqueos != 0) {
                        $arreglo[$tienda][$material]['id'] = $material;
                        $arreglo[$tienda][$material]['inicial'] = $canInicial;
                        $arreglo[$tienda][$material]['fecha'] = $canFecha;
                        $arreglo[$tienda][$material]['bloqueos'] = $canBloqueos;
                        $arreglo[$tienda][$material]['codigo'] = $arregloMaterial[$material]['codigo'];
                        $arreglo[$tienda][$material]['nombre'] = $arregloMaterial[$material]['nombre'];
                        $arreglo[$tienda][$material]['clasificacion'] = $arregloMaterial[$material]['clasificacion'];
                        $arreglo[$tienda][$material]['subclasificacion'] = $arregloMaterial[$material]['subclasificacion'];
                        $total_final++;                        
                    }
                }
            }
            if (count($arreglo) > 0) {
                $listaCodigo = $this->Tienda->find('list', array('fields' => array('id', 'codigo'), 'conditions' => array('Tienda.id >' => '0', 'Tienda.estatus' => 1), 'order' => 'Tienda.id'));
                $this->set('tienda_codigos', $listaCodigo);
                $this->Tienda->virtualFields['nombrecompleto'] = 'Tienda.codigo || \'-\' || Tienda.nombre';
                $listaTiendas = $this->Tienda->find('list', array('fields' => array('id', 'nombrecompleto'), 'conditions' => array('Tienda.id >' => '0', 'Tienda.estatus' => 1), 'order' => 'Tienda.id'));
                $this->set('tienda_oculta', $listaTiendas);
                $this->set('data', $arreglo);
                $this->set('busq', null);
                $this->set('id_tiendas', $ids_tienda);
                $this->set('formato', $formato);
                $this->set('tipoReporte', $tipoReporte);
            } else {
                $this->render('existencias_fechas');
            }
            
        }
    }

}

?>
